package com.sunny.example;

import java.util.*;

/**
 * 质数：除了1和它自身外，不能被其他自然数整除的数，叫质数
 * 质数因子 :指能整除给定正整数的质数
 * 描述
 * <p>
 * 功能:输入一个正整数，按照从小到大的顺序输出它的所有质因子（重复的也要列举）（如180的质因子为2 2 3 3 5 ）
 * <p>
 * 数据范围： 1≤n≤2×109+14 1 \le n \le 2 \times 10^{9} + 14 \ 1≤n≤2×109+14
 * 输入描述：
 * <p>
 * 输入一个整数
 * 输出描述：
 * <p>
 * 按照从小到大的顺序输出它的所有质数的因子，以空格隔开。
 */
public class HJ6 {

    static StringBuffer stringBuffer = new StringBuffer();

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);

        findZS(scanner.nextLong());
//        System.out.println(stringBuffer.toString());
    }

    /**
     * 查找质数：除了1和它本身外，不能被其他自然数整除的数
     *
     * @param inputInt
     */
    private static void findZS(long inputInt) {

        //算法一：在大整数，比如：2000000014会超时
        /*long i = 2;
        while (inputInt >= i) {
            if (inputInt % i == 0) {
                stringBuffer.append(i + " ");
                inputInt /= i;
            } else {
                i++;
            }
        }*/

        //算法二：网上使用平方根

        long k = (long) Math.sqrt(inputInt);

        for (long i = 2; i <= k; ++i) {
            while (inputInt % i == 0) {
                System.out.print(i + " ");
                inputInt /= i;
            }
        }
        System.out.println(inputInt == 1 ? "": inputInt+" ");

    }
}
